package ventanas;

import java.awt.EventQueue;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;

import clasesBasicas.Global;
import clasesBasicas.Usuario;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Dimension;
import java.sql.SQLException;

public class VentanaRegistro extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = -3754258808769075106L;

	private JPanel contentPane;
	private JTextField textFieldNombre;
	private JTextField textFieldApellidos;
	private JTextField textFieldDni;
	private JTextField textFieldEmail;
	private JTextField textFieldId;
	private JTextField textFieldPregunta;
	private JTextField textFieldRespuesta;
	private JPasswordField passwordField;
	private JPasswordField passwordFieldAdmin;
	private JPopupMenu pop;
	private JKeyboardPane teclado;
	private JLabel lblNewLabel_3;
	private boolean existe = false;
	private int dni;
	private String esadmin;
	private int dineroActual;
	private int nivelActual;
	private String pass;
	private JFrame esta;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VentanaRegistro frame = new VentanaRegistro();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public VentanaRegistro() {
		esta=this;
		colocarSkin();
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setTitle("Registro");
		setBounds(100, 100, 617, 502);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel lblNombre = new JLabel("Nombre:");
		lblNombre.setBounds(31, 13, 68, 34);
		contentPane.add(lblNombre);

		textFieldNombre = new JTextField();
		textFieldNombre.setPreferredSize(new Dimension(10, 22));
		textFieldNombre.setBounds(111, 12, 131, 37);
		contentPane.add(textFieldNombre);
		textFieldNombre.setColumns(10);

		JLabel lblApellidos = new JLabel("Apellidos:");
		lblApellidos.setBounds(31, 65, 68, 32);
		contentPane.add(lblApellidos);
		
		textFieldApellidos = new JTextField();
		textFieldApellidos.setBounds(111, 62, 131, 34);
		contentPane.add(textFieldApellidos);
		textFieldApellidos.setColumns(10);

		JLabel lblDni = new JLabel("DNI:");
		lblDni.setBounds(31, 110, 56, 29);
		contentPane.add(lblDni);

		textFieldDni = new JTextField();
		textFieldDni.setBounds(111, 103, 131, 42);
		contentPane.add(textFieldDni);
		textFieldDni.setColumns(10);

		JLabel lblEmail = new JLabel("Email:");
		lblEmail.setBounds(31, 148, 56, 34);
		contentPane.add(lblEmail);

		textFieldEmail = new JTextField();
		textFieldEmail.setBounds(111, 148, 200, 34);
		contentPane.add(textFieldEmail);
		textFieldEmail.setColumns(10);

		JLabel lblId = new JLabel("ID Usuario:\r\n");
		lblId.setBounds(31, 186, 68, 33);
		contentPane.add(lblId);

		JLabel lblContrasea = new JLabel("Contrase\u00F1a:");
		lblContrasea.setBounds(31, 232, 78, 28);
		contentPane.add(lblContrasea);

		textFieldId = new JTextField();
		textFieldId.setBounds(111, 185, 131, 34);
		contentPane.add(textFieldId);
		textFieldId.setColumns(10);

		lblNewLabel_3 = new JLabel();
		ImageIcon icon = new ImageIcon("imagenesBasicas/tick.gif");
		lblNewLabel_3.setIcon(icon);
		lblNewLabel_3.setVisible(true);

		// lblNewLabel_3.setVisible(false);

		textFieldId.addFocusListener(new FocusListener() {

			@Override
			public void focusLost(FocusEvent arg0) {
				// TODO Auto-generated method stub
				existe = Global.sU.existeUsuarioReg(textFieldId.getText());
				if (existe) {
					ImageIcon icon = new ImageIcon("imagenesBasicas/aspa.png");
					lblNewLabel_3.setIcon(icon);
					lblNewLabel_3.setVisible(true);
				} else {
					ImageIcon icon = new ImageIcon("imagenesBasicas/tick.png");
					lblNewLabel_3.setIcon(icon);
					lblNewLabel_3.setVisible(true);
				}

			}

			@Override
			public void focusGained(FocusEvent arg0) {
				// TODO Auto-generated method stub
				// Usuario temp= new Usuario();
				// Global.sU.añadirUsuario(temp);
			}
		});

		JLabel lblPregunta = new JLabel("Pregunta Secreta:");
		lblPregunta.setBounds(31, 273, 112, 34);
		contentPane.add(lblPregunta);

		JLabel lblRespuesta = new JLabel("Respuesta Secreta:");
		lblRespuesta.setBounds(31, 320, 112, 34);
		contentPane.add(lblRespuesta);

		textFieldPregunta = new JTextField();
		textFieldPregunta.setBounds(171, 273, 283, 34);
		contentPane.add(textFieldPregunta);
		textFieldPregunta.setColumns(10);

		textFieldRespuesta = new JTextField();
		textFieldRespuesta.setBounds(171, 320, 283, 34);
		contentPane.add(textFieldRespuesta);
		textFieldRespuesta.setColumns(10);

		JLabel lblSiTienesPermisos = new JLabel(
				"Si tienes permisos de administrador, introduzca la contrase\u00F1a:");
		lblSiTienesPermisos.setBounds(31, 367, 366, 31);
		contentPane.add(lblSiTienesPermisos);

		passwordField = new JPasswordField();
		passwordField.setBounds(111, 226, 131, 34);
		contentPane.add(passwordField);

		passwordFieldAdmin = new JPasswordField();
		passwordFieldAdmin.setBounds(409, 365, 111, 34);
		contentPane.add(passwordFieldAdmin);

		passwordFieldAdmin.addFocusListener(new FocusListener() {

			@Override
			public void focusGained(FocusEvent arg0) {
				pop = new JPopupMenu();
				teclado = new JKeyboardPane(passwordFieldAdmin);
				pop.add(teclado);
				pop.setVisible(true);
				pop.setLocation(
						passwordFieldAdmin.getLocationOnScreen().x + 112,
						passwordFieldAdmin.getLocationOnScreen().y - 1);
			}

			@Override
			public void focusLost(FocusEvent arg0) {
				pop.setVisible(false);
			}

		});

		JButton btnRegistrarse = new JButton("Registrarse");
		btnRegistrarse.addMouseListener(new MouseAdapter() {

			public void mouseReleased(MouseEvent arg0) {

				if (!existe) {
					if (textFieldDni.getText().length() == 8) {
						pass = "";
						for (int i = 0; i < passwordField.getPassword().length; i++) {
							pass += passwordField.getPassword()[i];
						}
						String passadm = "";
						for (int i = 0; i < passwordFieldAdmin.getPassword().length; i++) {
							passadm += passwordFieldAdmin.getPassword()[i];
						}

						try {
							dni = Integer.parseInt(textFieldDni.getText());
						} catch (NumberFormatException e) {
							JOptionPane
							.showMessageDialog(
									esta,
									"El DNI solo puede contener datos numéricos.",
									"Error de insercción", 0);
						}
						dineroActual = 1000000;
						nivelActual = 1;

						if (passadm != "") {
							if (passadm.equalsIgnoreCase("ibex35"))
							{
								esadmin = "y";
								// Poner condicion
								int gradopermiso = 0;
								Usuario temp = new Usuario(dni, textFieldNombre
										.getText(), textFieldApellidos
										.getText(), textFieldId.getText(),
										pass, textFieldEmail.getText(),
										dineroActual, nivelActual,
										textFieldPregunta.getText(),
										textFieldRespuesta.getText());
								try {
									Global.sU.añadirUsuario(temp, esadmin,
											gradopermiso);
								} catch (SQLException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}

								textFieldNombre.setText("");
								textFieldApellidos.setText("");
								textFieldDni.setText("");
								textFieldEmail.setText("");
								textFieldId.setText("");
								textFieldPregunta.setText("");
								textFieldRespuesta.setText("");
								passwordField.setText("");
								passwordFieldAdmin.setText("");
								dispose();
							}
							else {
								JOptionPane
								.showMessageDialog(
										esta
										,
										"La contraseña de administrador introducida no es correcta.",
										"Error de insercción", 0);
							} 
						}
						else 
						{
							esadmin = "n";
							int gradopermiso = 0;
							Usuario temp = new Usuario(dni, textFieldNombre
									.getText(), textFieldApellidos
									.getText(), textFieldId.getText(),
									pass, textFieldEmail.getText(),
									dineroActual, nivelActual,
									textFieldPregunta.getText(),
									textFieldRespuesta.getText());
							try {
								Global.sU.añadirUsuario(temp, esadmin,
										gradopermiso);
							} catch (SQLException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}

							textFieldNombre.setText("");
							textFieldApellidos.setText("");
							textFieldDni.setText("");
							textFieldEmail.setText("");
							textFieldId.setText("");
							textFieldPregunta.setText("");
							textFieldRespuesta.setText("");
							passwordField.setText("");
							passwordFieldAdmin.setText("");
							dispose();
						}


					} else {
						JOptionPane.showMessageDialog(esta,
								"El DNI debe tener exactamente 8 dígitos.",
								"Error de insercción", 0);
					}
				} else {
					JOptionPane.showMessageDialog(esta,
							"El nombre de usuario introducido ya existe",
							"Error de insercción", 0);
				}

				// // Poner condicion
				// int gradopermiso = 0;
				// Usuario temp = new Usuario(dni, textFieldNombre.getText(),
				// textFieldApellidos.getText(), textFieldId.getText(),
				// pass, textFieldEmail.getText(), dineroActual,
				// nivelActual, textFieldPregunta.getText(),
				// textFieldRespuesta.getText());
				// try {
				// Global.sU.añadirUsuario(temp, esadmin, gradopermiso);
				// } catch (SQLException e) {
				// JOptionPane
				// .showMessageDialog(
				// null,
				// "La cuenta no se ha podido crear. Compruebe su conexión a internet.",
				// "Error en la creación de la cuenta",
				// JOptionPane.ERROR_MESSAGE);
				// }
				//
				// textFieldNombre.setText("");
				// textFieldApellidos.setText("");
				// textFieldDni.setText("");
				// textFieldEmail.setText("");
				// textFieldId.setText("");
				// textFieldPregunta.setText("");
				// textFieldRespuesta.setText("");
				// passwordField.setText("");
				// passwordFieldAdmin.setText("");
				// dispose();

			}
		});
		btnRegistrarse.setBounds(243, 411, 103, 31);
		contentPane.add(btnRegistrarse);

		lblNewLabel_3 = new JLabel("");
		lblNewLabel_3.setBounds(254, 186, 25, 22);
		contentPane.add(lblNewLabel_3);
	}

	public void colocarSkin() {
		try {
			UIManager
			.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
	}

	public void cerrar() {
		this.setVisible(false);
	}
}
